package com.pizzaonline.utils;
import java.io.*;

import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamSource;
import javax.xml.transform.stream.StreamResult;
import java.sql.*;
import java.util.*;
import java.security.*;

import javax.servlet.jsp.*;

import org.jdom.Document;

public class Utils {

	public static String addPath = "WebContent/";
	public static Vector<String> msgErreur = null;
	public static Vector<String> msgErreurName = null;
	
	
	// Ecrit la configuration de la base de données 
	// Problème résolu: écrire dans un fichier .java et ça met que la ressource n'est pas dispo
	public static void ecrireConfigBD(JspWriter out,String serveur,String utilisateur,String mdp)
	{
		try {
			out.print("<!-- current directory"+System.getProperty("user.dir")+" -->");
			File f=new File("config.java");
			if (!f.exists())
				f.createNewFile();
			if (f.canWrite())
			{
				FileWriter fw=new FileWriter(f);
				fw.write("<%=\n"+serveur+"\n"+utilisateur+"\n"+mdp+"\n%>");
				fw.close();
			}
			else
			{
				out.write("Impossible d'écrire dans le fichier!");
			}
		}
		catch (Exception e)
		{
			System.out.println(e.toString());

		}


	}
	
//	public static Connection connexionBD()
//	{
//		try
//		{
//			File f=new File("config.jsp");
//			String serveur="localhost";
//			String utilisateur="root";
//			String mdp="";
//			if (f.exists())
//			{
//				BufferedReader fr=new BufferedReader(new FileReader(f));
//				for (int i=0;i<3;i++)
//				{
//					String line=fr.readLine();
//					switch (i)
//					{
//					case 0:
//						serveur=line;
//						break;
//					case 1:
//						utilisateur=line;
//						break;
//					case 2:
//						mdp=line;
//						break;
//					default:
//						break;
//
//					}
//				}
//			}
//			Class.forName("com.mysql.jdbc.Driver").newInstance();
//
//			Connection c=DriverManager.getConnection("jdbc:mysql://"+serveur+":3306/gii",utilisateur,mdp);
//			return c;
//		}
//		catch (Exception e)
//		{
//			System.out.println(e.toString());
//			return null;
//		}
//
//
//	}
	
	public static void fillMsgErreur() {
		msgErreur = new Vector<String>();
		msgErreurName = new Vector<String>();
		msgErreurName.add("LoginExistant".toLowerCase());
		msgErreur.add("Ce login existe déjà, veuillez en choisir un autre");
		msgErreurName.add("MauvaisLogin".toLowerCase());
		msgErreur.add("Mauvais mot de passe ou nom d'utilisateur.");
		msgErreurName.add("NoAccess".toLowerCase());
		msgErreur.add("Cette page n'existe pas ou vous n'y avez pas accès.");
		msgErreurName.add("SQLConnProb".toLowerCase());
		msgErreur.add("Erreur ! La connexion à MySQL a échoué!");
		msgErreurName.add("SQLErreur".toLowerCase());
		msgErreur.add("Une erreur s'est produite lors du traitement de la requête, veuillez réessayer.");
	}
	
	public static String getErrorMessage(int index) {
		if (msgErreur == null) {
			fillMsgErreur();
		}
		try {
			return msgErreur.elementAt(index);
		} catch (Exception e) {
			return "";
		}
	}
	
	public static int getErrorIndex(String erreur) {
		if (msgErreur == null) {
			fillMsgErreur();
		}
		return msgErreurName.indexOf(erreur.toLowerCase());
	}
	
	public static int getErrorID(String erreur) {
		if (msgErreur == null) {
			fillMsgErreur();
		}
		int index = getErrorIndex(erreur);
		if (index != -1)
			return (1 << index);
		else
			return 0;
	}

	public static void printHeader(JspWriter out, String titre,String cssFile, String jsFile)
	{
		try {
			out.print("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\" \"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd \">\n"+
					"<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"fr\">\n"+
					"<head>\n"+
					"<title>"+titre+"</title>\n"+
					((cssFile != null)?("<link rel=\"stylesheet\" type=\"text/css\" href=\""+cssFile +"\" />\n"):"")+
					((jsFile != null)?("<script type=\"text/javascript\" src=\""+jsFile+"\"></script>\n"):"")+
					"<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n"+
					"</head>\n"+
			"<body>\n");
		}
		catch (Exception e)
		{
			return;
		}


	}
	public static void printFooter(JspWriter out)
	{
		try {
			out.print("</body>\n</html>");
		}
		catch (Exception e)
		{
			return;
		}
	}
	public static void lancerXSLT(JspWriter out, String fichierXML, String fichierXSL)
	{
			lancerXSLT(out, fichierXML, fichierXSL, false, null);

	}
	public static void lancerXSLT(JspWriter out, String XML, String fichierXSL, boolean xmlIsData, Hashtable<String,String> params)
	{


		// Set the TransformerFactory system property.
		// Note: For more flexibility, load properties from a properties file.
		StringWriter writer=new StringWriter();
		String key = "javax.xml.transform.TransformerFactory";
		String value = "org.apache.xalan.xsltc.trax.TransformerFactoryImpl";
		Properties props = System.getProperties();
		props.put(key, value);
		System.setProperties(props);

		try {
			// Instantiate the TransformerFactory, and use it along with a StreamSource
			// XSL stylesheet to create a Transformer.
			TransformerFactory tFactory = TransformerFactory.newInstance();
			
			Transformer transformer =
				tFactory.newTransformer(new StreamSource(new FileInputStream(fichierXSL)));
			// Perform the transformation from a StreamSource to a StreamResult;
			
			// paramètres à passer au XSLT (utile pour le filtrage des pizzas)
			if (params!=null)
			{
				Set<Map.Entry<String, String>> mapEntrySet=params.entrySet();
				Iterator<Map.Entry<String, String>> i=mapEntrySet.iterator();
				while (i.hasNext())
				{
					Map.Entry<String,String> e=i.next();
					String variable=e.getKey();
					String valeur=e.getValue();
					transformer.setParameter(variable, valeur);

				}
			}
			if (xmlIsData)
				transformer.transform(new StreamSource(new StringReader(XML)),
					new StreamResult(writer));
			else
				transformer.transform(new StreamSource(new FileInputStream(XML)),
						new StreamResult(writer));
			out.write(writer.toString());
			return;
		}
		catch (Exception e)
		{
			System.out.print(e.getMessage());
		}
		return;

	}
	
	public static String toMd5(String s) {
		try {
			MessageDigest mdAlgorithm = MessageDigest.getInstance("MD5");
			mdAlgorithm.update(s.getBytes("UTF-8"));
	
			byte[] digest = mdAlgorithm.digest();
			StringBuffer hexString = new StringBuffer();
	
			for (int i = 0; i < digest.length; i++) {
			    s = Integer.toHexString(0xFF & digest[i]);
			    if (s.length() < 2) {
			    	s = "0" + s;
			    }
			    hexString.append(s);
			}
			return hexString.toString();
		} catch (Exception e) {
			return s;
		}
	}

	public static void rediriger(JspWriter out,String adresse)
	{
		System.out.println(adresse);
		try {
		out.write("<script language=\"JavaScript\">"+
     "document.location.href=\""+adresse+"\""+
"</script>");
		}
		catch (Exception e)
		{
			return;
		}
	}
	
	public static String formattage(String str){
		String res = null;
		res = str.replaceAll("\\s", "_");
		return res;
	}
	
	
}


